#include <iostream>
#include <string>
#include <regex>

int main()
{
    // HTTP请求行格式 "GET /bitejiuyeke/login?user=xiaoming&pass=123123 HTTP/1.1\r\n"
    std::string str = "GET /bitejiuyeke/login?user=xiaoming&pass=123123 HTTP/1.1";
    std::smatch matches; //存储容器
    //请求方法的匹配： GET HEAD POST PUT DELETE ..
    std::regex e("(GET|HEAD|POST|PUT|DELETE) ([^?]*)\\?(.*) (\\HTTP/1\\.[01])"); // "."匹配任意非\r\n的单个字符,"*"表示能匹配前面的"."0次或多次
    //很明显，这里就是匹配除了GET之后的所有字符

    // [^?] :匹配非"?"字符，*表示匹配0次或多次
    
    // \\?(.*) 匹配一个以"?"开始的字符(不要这个问号）并持续匹配直到遇到空格，注意有一个空格 
    // \\?(.*)与 (\\?.*)不同，第一个不要"?"了，第二个却要"?"
    
    // (\\HTTP/1\\.[01]): 匹配HTTP/1. [01]:表示匹配0或者1 ， "."表示匹配任意非\r\n的单个字符，但是这里我们想要的是真正的"."
    // 那就要使用 "\\."转义成单个"."
    bool ret = std::regex_match(str,matches,e);
    if(ret == false)
        return -1;

    for(auto &s : matches)
        std::cout << s << std::endl;
    return 0;
}